package br.com.requisicao.compra.dao.impl;

import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.criterion.Restrictions;

import br.com.requisicao.compra.canonico.RequisicaoCompraProduto;
import br.com.requisicao.compra.dao.IRequisicaoCompraProdutoDAO;
import br.com.requisicao.compra.util.HibernateUtil;


public class RequisicaoCompraProdutoDAO implements IRequisicaoCompraProdutoDAO {

	public RequisicaoCompraProduto obtemPeloCodigo(Long codigo) {
		Session session = HibernateUtil.getSession();
		RequisicaoCompraProduto requisicaoCompraProduto = null;
		try {
			requisicaoCompraProduto = (RequisicaoCompraProduto) session.get(
					RequisicaoCompraProduto.class, codigo);
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			session.close();
		}

		return requisicaoCompraProduto;
	}

	public RequisicaoCompraProduto obtemPorIdFornecedor(Long codigo) {
		Session session = HibernateUtil.getSession();
		RequisicaoCompraProduto requisicaoCompraProduto = null;
		try {
			requisicaoCompraProduto = (RequisicaoCompraProduto) session.createCriteria(RequisicaoCompraProduto.class).
					add(Restrictions.eq("fornecedor.codigo", codigo)).uniqueResult();
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			session.close();
		}

		return requisicaoCompraProduto;
	}
	
	public RequisicaoCompraProduto obtemPorIdUnidadeMedida(Long codigo) {
		Session session = HibernateUtil.getSession();
		RequisicaoCompraProduto requisicaoCompraProduto = null;
		try {
			requisicaoCompraProduto = (RequisicaoCompraProduto) session.createCriteria(RequisicaoCompraProduto.class).
					add(Restrictions.eq("unidadeMedida.codigo", codigo)).uniqueResult();
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			session.close();
		}

		return requisicaoCompraProduto;
	}

	public void update(RequisicaoCompraProduto requisicaoCompraProduto) {
		Session session = HibernateUtil.getSession();
		Transaction tx = session.beginTransaction();
		try {
			session.update(requisicaoCompraProduto);
			tx.commit();
			session.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

}
